www.gusucode.com > 基于Matlab的MIMO通信系统仿真 含报告;司中威;了解移动通信 > 基于Matlab的MIMO通信系统仿真 含报告;司中威;了解移动通信关键技术,了解数字通信系统仿真流程,实现基本的信道编译码、调制解调等通信模块。(好评如潮,课设拿满) 学习并实现MIMO空时处理技术 学习性能分析的思路和方法/mimo/matlab for mimo 2x2/DSK6713_rxtx.m
function [Xin,no_samples_delivered,buffer_size]=DSK6713_rxtx(no_samples_wanted,no_repeats,repeat_ix_receive,Xout,sample_rate) % % [Xin,no_samples_delivered,buffer_size]=DSK6713_rxtx(no_samples_wanted,no_repeats,repeat_ix_receive,Xout,sample_rate) % %%%%%%% Before running the function. % Start code-composer studio. % Load the release version of DSK6713_rxtx. Start the program (Debug->Run). % Start the host program DSK6713_Host_rxtx.exe in a command window. % Change the directory of matlab to the directory of DSK6713_Host_rxtx.exe. % If the program hangs: Stop DSK6713_Host_rxtx.exe, reload and re-start % DSK6713_rxtx.out restart DSK6713_Host_rxtx.exe, stop and re-start % DSK6713_rxtx.m . % %%%%%%% Inputs: % no_samples_wanted: Select the number of samples you want. The number of samples you get is no_samples_delivered % which is no_samples_wanted rounded downwards to a multiple of buffer_size. % no_repeats: The signal Xout(:,1:no_samples_delivered) is sent no_repeats times on the D/A converters. % repeat_ix_receive: Determines the index of the repeat under which the data in from the A/D converters is sent to matlab in Xin. % Xout : A 2xno_samples_wanted dimensional matrix with rows corresponding to the outputs to be sent on the D/A converters. % sample_rate : The selected sample rate for both A/D and D/A converters. Must be 96000,88200,44100,32000,8021 or % 8000. If not 48000 is selected. % AIC23control : Not implemented yet. But control of all parameters of the aic23 can be easily achieved by just manipulating this file. if ~((size(Xout,1)==2) & (size(Xout,2)==no_samples_wanted)) error('The size of Xout shall be 2xno_samples_wanted') end; if ~( (min(Xout(:))>(-2^15-1)) & (max(Xout(:))<2^15)) error('The elements of Xout shall be in the range [-2^15,2^15-1]') end; config=zeros(13,1); %% 10 AIC23 registers + 3 custom parameters. config(1+0)=hex2int('0017'); % 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume config(1+1)=hex2int('0017'); % 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume config(1+2)=hex2int('01f9'); % 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume config(1+3)=hex2int('01f9'); % 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume config(1+4)=hex2int('0011'); % 4 DSK6713_AIC23_ANAPATH Analog audio path control config(1+5)=hex2int('0000'); % 5 DSK6713_AIC23_DIGPATH Digital audio path control config(1+6)=hex2int('0000'); % 6 DSK6713_AIC23_POWERDOWN Power down control config(1+7)=hex2int('0043'); % 7 DSK6713_AIC23_DIGIF Digital audio interface format config(1+8)=hex2int('0001'); % 8 DSK6713_AIC23_SAMPLERATE Sample rate control config(1+9)=hex2int('0001'); % 9 DSK6713_AIC23_DIGACT Digital interface activation config(1+10)=no_samples_wanted; config(1+11)=no_repeats; config(1+12)=repeat_ix_receive; switch sample_rate case 96000, config(1+8)=sum([32,16,8,4,2].*[0,1,1,1,0])+1; case 88200, config(1+8)=sum([32,16,8,4,2].*[1,1,1,1,1])+1; case 44100, config(1+8)=sum([32,16,8,4,2].*[1,0,0,0,1])+1; case 32000, config(1+8)=sum([32,16,8,4,2].*[0,1,1,0,0])+1; case 8021, config(1+8)=sum([32,16,8,4,2].*[1,0,1,1,1])+1; case 8000, config(1+8)=sum([32,16,8,4,2].*[0,0,1,1,0])+1; otherwise, %Keep default. end; disp('Wait'); fid=fopen('config_in.dat','w'); fwrite(fid,config,'int'); fclose(fid); DACRawBuffer=kron(Xout(1,:),[1,0])+kron(Xout(2,:),[0,1]); fid=fopen('data_in.dat','w'); fwrite(fid,DACRawBuffer,'short'); fclose(fid); fid=fopen('use_counter.dat','r'); [use_counter,dummy]=fread(fid,1,'int'); fclose(fid); use_counter=use_counter+1; fid=fopen('use_counter.dat','w'); fwrite(fid,use_counter,'int'); fclose(fid); done_counter=-1; while ~(done_counter==use_counter) pause(2); fid=fopen('done_counter.dat','r'); [done_counter,dummy]=fread(fid,1,'int'); fclose(fid); end; fid=fopen('config_out.dat','r'); [temp,dummy]=fread(fid,2,'int'); no_samples_delivered=temp(1); buffer_size=temp(2); n_buffers_tot=no_samples_delivered/buffer_size; fclose(fid); fid=fopen('data_out.dat','r'); [ADCRawBuffer,dummy]=fread(fid,2*no_samples_delivered,'short'); fclose(fid); Xin=[ADCRawBuffer(1:2:(no_samples_delivered*2)),... ADCRawBuffer(2:2:(no_samples_delivered*2))]'; disp('Done');